<?php
namespace app\common\Model;
use think\Model;
use think\model\concern\SoftDelete;
use think\Db;
use think\facade\Session;

class User extends Model
{
    protected $pk = 'id'; //主键
    protected $autoWriteTimestamp = true; //开启自动时间戳
    protected $createTime = 'false';
    protected $updateTime = 'update_time';
    //protected $auto = ['password']; //定义自动处理的字段
    //自动对password进行md5加密
    protected function setPasswordAttr($value){
        return md5($value);
    }


    //软删除
    use SoftDelete;
	protected $deleteTime = 'delete_time';
	protected $defaultSoftDelete = 0;
    //只读字段,禁止更改
    //protected $readonly = ['email'];
	
	//用户关联评论
	public function comments()
	{
		return $this->hasMany('Comment','user_id','id');
	}
	

/*    //登陆校验
    public function login1($data)
    {
		$validata = new \app\common\validate\User();
        //用email登录场景验证
		if(empty($data['name']) && $data['email'] != ''){
			$result = $validata->scene('loginEmail')->check($data);
			if (!$result) {
            return $validata->getError();
			}
			
        //对输入的密码字段进行MD5加密，再进行数据库的查询
			$data = [
				'email' => $data['email'],
				'password' => md5($data['password'])
			];
		} 
		//用用户名name登录场景验证
		if(empty($data['email']) && $data['name'] != ''){
			$result = $validata->scene('loginName')->check($data);
			if (!$result) {
            return $validata->getError();
			}
			//对输入的密码字段进行MD5加密，再进行数据库的查询
			$data = [
				'name' => $data['name'],
				'password' => md5($data['password'])
			];
		}
*/		
		//登陆校验
    public function login($data)
    {
		$validata = new \app\common\validate\User();
		
        //用email登录场景验证
		if(empty($data['name']) && $data['email'] != ''){
			$result = $validata->scene('loginEmail')->check($data);
			if (!$result) {
				return $validata->getError();
			} else {
				//查询用户
				$user = Db::name('user')->where('email',$data['email'])->find();
			}
		} 
		//用用户名name登录场景验证
		if(empty($data['email']) && $data['name'] != ''){
			$result = $validata->scene('loginName')->check($data);
			if (!$result) {
            return $validata->getError();
			} else {
			//查询用户
			$user = Db::name('user')->where('name',$data['name'])->find();
			}
		}
		//对输入的密码字段进行MD5加密，再进行数据库的查询
		$salt = substr(md5($user['create_time']),-6);
		$pwd = substr_replace(md5($data['password']),$salt,0,6);
		$data['password'] = md5($pwd);
        if($user['password'] == $data['password']){
			//将用户数据写入Session
			Session::set('user_id',$user['id']);
			Session::set('user_name',$user['name']);
            //查询结果1表示有用户，用户名密码正确
            return 1;
        }else{
            return '用户名或密码错误';
        }
    }
	
    //注册校验
    public function reg($data)
    {
        //校验实例化
        $validata = new \app\common\validate\User();
        //校验场景中reg的方法数据
        $status = $validata->scene('Reg')->check($data);
        if ($status) {
            //如果校验通过，存入到数据
            $user = new User;
			//随机存入默认头像
			$code = mt_rand('1','11');
			$data['user_img'] = "images/avatar/$code.jpg";
			
			$data['create_time'] = time();
			$salt = substr(md5($data['create_time']),-6);
			$data['password'] = substr_replace(md5($data['password']),$salt,0,6);

            $result = $user->allowField(true)->save($data);
           if ($result) {
               return 1;
           } else{
               return '注册失败';
           }

        } else{
            //如果校验不通过返回错误信息
            return $validata->getError() ;
        }

    }
	
	public function set($data)
	{
		$userId = $data['user_id'];
		$user = User::where('id',$userId)->find();
		$result = $user->allowField(['email','nickname','sex','city','sign'])->save($data);
		if($result){
			return 1;
		}else{
			return '修改失败';
		}
	}
	
	//用户修改密码
	public function setpass($data)
	{
		$user = $this->find($data['user_id']);
		$salt = substr(md5($user['create_time']),-6);
		$pwd = substr_replace(md5($data['nowpass']),$salt,0,6);
		$data['nowpass'] = md5($pwd);
		$result = $data['nowpass'] == $user['password'];
		if(!$result){
			return '当前密码不正确';
		}
		$data['password'] = substr_replace(md5($data['password']),$salt,0,6); 
		$user->password = $data['password'];
		$result = $user->save();
		if($result){
			return 1;
		}else{
			return '修改失败,请改换密码';
		}
	}
	
	
}